#ifndef MESSAGESHOWAREA_H
#define MESSAGESHOWAREA_H

#include <QScrollArea>
#include <QWidget>
#include <QLabel>

#include "model/data.h"

//  .h文件中不建议进行  using namespace  xxxx  操作
using model::Message;

/////////////////////////////////////////////
/// 表示消息展示区
///////////////////////////////////////////
class MessageShowArea : public QScrollArea
{
    Q_OBJECT
public:
    MessageShowArea();

    //尾插
    void addMessage(bool isLeft, const Message& message);
    //头插
    void addFrontMessage(bool isLeft, const Message& message);
    //清空消息
    void clear();

private:
    QWidget* container;
};


/////////////////////////////////////////////
/// 表示一个消息元素
/// 这个要同时支持  文本消息、文件消息、语言消息
/// 先实现文本消息
///////////////////////////////////////////
class MessageItem : public QWidget {
    Q_OBJECT

public:
    //此处的 ifLeft 表示这个 item 是否是一个 “左侧消息”
    MessageItem(bool isLeft);

    //通过 工厂方法 创建 MessageItem 实例
    static MessageItem* makeMessageItem(bool isLeft,const Message& message);

    //添加工厂函数
    static QWidget* makeTextMessageItem(bool isLeft,const QString& text);
    static QWidget* makeImageMessageItem();
    static QWidget* makeFileMessageItem();
    static QWidget* makeSpeechMessageItem();

private:
    bool isLeft;

};

/////////////////////////////////////////////
/// 创建类表示 “文本消息” 正文部分
/// ///////////////////////////////////////
class MessageContentLabel : public QWidget{
public:
    MessageContentLabel(const QString& test,bool isLeft);

    void paintEvent(QPaintEvent* event)override;
private:
    QLabel* label;
    bool isLeft;
};

#endif // MESSAGESHOWAREA_H
